/**
 * Copyright (c) 2008, George Taylor
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, are permitted 
 * provided that the following conditions are met:
 * 
 *   * Redistributions of source code must retain the above copyright notice, this list of 
 *     conditions and the following disclaimer.
 *   * Redistributions in binary form must reproduce the above copyright notice, this list of 
 *     conditions and the following disclaimer in the documentation and/or other materials 
 *     provided with the distribution.
 *   * Neither the name of the copyright holder's organization nor the names of its contributors 
 *     may be used to endorse or promote products derived from this software without specific 
 *     prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR 
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 
 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package uk.co.taylorconsulting.annoweb.web.controller;

import javax.servlet.http.HttpServletRequest;

import uk.co.taylorconsulting.annoweb.annotation.cache.CacheImplementation;
import uk.co.taylorconsulting.annoweb.annotation.cache.CacheStore;

public class CacheManager {
	public static CacheImplementation cacheManager;
	
	public static void setCacheManager(CacheImplementation cm) {
		cacheManager = cm;
	}
	
	public static void addToCache(HttpServletRequest request, CacheStore store, String cacheId, String itemId, boolean value) {
		if (cacheManager != null) {
			cacheManager.addToCache(request, store, cacheId, itemId, value);
		}
	}
	
	public static void addToCache(HttpServletRequest request, CacheStore store, String cacheId, String itemId, byte value) {
		if (cacheManager != null) {
			cacheManager.addToCache(request, store, cacheId, itemId, value);
		}
	}
	
	public static void addToCache(HttpServletRequest request, CacheStore store, String cacheId, String itemId, char value) {
		if (cacheManager != null) {
			cacheManager.addToCache(request, store, cacheId, itemId, value);
		}
	}
	
	public static void addToCache(HttpServletRequest request, CacheStore store, String cacheId, String itemId, double value) {
		if (cacheManager != null) {
			cacheManager.addToCache(request, store, cacheId, itemId, value);
		}
	}
	
	public static void addToCache(HttpServletRequest request, CacheStore store, String cacheId, String itemId, float value) {
		if (cacheManager != null) {
			cacheManager.addToCache(request, store, cacheId, itemId, value);
		}
	}
	
	public static void addToCache(HttpServletRequest request, CacheStore store, String cacheId, String itemId, int value) {
		if (cacheManager != null) {
			cacheManager.addToCache(request, store, cacheId, itemId, value);
		}
	}
	
	public static void addToCache(HttpServletRequest request, CacheStore store, String cacheId, String itemId, long value) {
		if (cacheManager != null) {
			cacheManager.addToCache(request, store, cacheId, itemId, value);
		}
	}
	
	public static void addToCache(HttpServletRequest request, CacheStore store, String cacheId, String itemId, Object Value) {
		if (cacheManager != null) {
			cacheManager.addToCache(request, store, cacheId, itemId, Value);
		}
	}
	
	public static void addToCache(HttpServletRequest request, CacheStore store, String cacheId, String itemId, short value) {
		if (cacheManager != null) {
			cacheManager.addToCache(request, store, cacheId, itemId, value);
		}
	}
	
	public static boolean getBooleanFromCache(HttpServletRequest request, CacheStore store, String cacheid, String itemId) {
		if (cacheManager != null) {
			return cacheManager.getBooleanFromCache(request, store, cacheid, itemId);
		}
		return false;
	}
	
	public static byte getByteFromCache(HttpServletRequest request, CacheStore store, String cacheid, String itemId) {
		if (cacheManager != null) {
			return cacheManager.getByteFromCache(request, store, cacheid, itemId);
		}
		return -1;
	}
	
	public static char getCharFromCache(HttpServletRequest request, CacheStore store, String cacheid, String itemId) {
		if (cacheManager != null) {
			return cacheManager.getCharFromCache(request, store, cacheid, itemId);
		}
		return Character.MIN_VALUE;
	}
	
	public static double getDoubleFromCache(HttpServletRequest request, CacheStore store, String cacheid, String itemId) {
		if (cacheManager != null) {
			return cacheManager.getDoubleFromCache(request, store, cacheid, itemId);
		}
		return -1.0;
	}
	
	public static float getFloatFromCache(HttpServletRequest request, CacheStore store, String cacheid, String itemId) {
		if (cacheManager != null) {
			return cacheManager.getFloatFromCache(request, store, cacheid, itemId);
		}
		return -1.0f;
	}
	
	public static int getIntFromCache(HttpServletRequest request, CacheStore store, String cacheid, String itemId) {
		if (cacheManager != null) {
			return cacheManager.getIntFromCache(request, store, cacheid, itemId);
		}
		return -1;
	}
	
	public static Object getItemFromCache(HttpServletRequest request, CacheStore store, String cacheid, String itemId) {
		if (cacheManager != null) {
			return cacheManager.getItemFromCache(request, store, cacheid, itemId);
		}
		return null;
	}
	
	public static long getLongFromCache(HttpServletRequest request, CacheStore store, String cacheid, String itemId) {
		if (cacheManager != null) {
			return cacheManager.getLongFromCache(request, store, cacheid, itemId);
		}
		return -1;
	}
	
	public static short getShortFromCache(HttpServletRequest request, CacheStore store, String cacheid, String itemId) {
		if (cacheManager != null) {
			return cacheManager.getShortFromCache(request, store, cacheid, itemId);
		}
		return -1;
	}
}
